package abcut;

//结点类，封装各个极大极小结点   
class Node{   
    String name;//节点名   
    boolean isMax;//判断是极大还是极小结点   
    boolean isCut;//判断是否已被剪枝   
    int data;//结点值   
    int pos;//在列表中的位置   
    Node former;//父结点   
    Node next;//应走的下一个子结点   
    NodeList son;//子结点集合   
    //构造函数   
    Node(){   
        name=null;   
        isMax=true;   
        isCut=false;   
        data=-10000;   
        pos=0;   
        former=null;   
        next=null;   
        son=new NodeList();   
    }   
    //通过结点名构造结点   
    Node(String s){   
        name=s;   
        isMax=true;   
        isCut=false;   
        data=-10000;   
        pos=0;   
        former=null;   
        next=null;   
        son=new NodeList();   
    }   
    //剪枝，所剪结点为所带参数结点开始之后的兄弟结点   
    public void cut(Node p){   
        int num=-1;   
        for(int i=0;i<son.size;i++){   
            if(son.get(i).name.equals(p.name)){//寻找与所带参数结点相同的结点   
                num=i;//记录其位置   
                break;   
            }   
        }   
        if(num>=son.size-1){//若是其父结点的最后一个结点，则无法剪枝，返回   
            return;   
        }   
        System.out.print("剪枝："+name+"：");//输出发生剪枝的结点   
        for(int i=num+1;i<son.size;i++){//从当前子结点之后的一个子节点开始剪枝   
            son.get(i).isCut=true;//标记为被剪枝   
            System.out.print(son.get(i).name+" ");//输出所剪的结点名   
        }   
        System.out.println();   
    }          
}  